package logica;
import java.util.Vector;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import logica.NodoDiccionario;

/**
 * Esta clase es utilizada para el manejo de los diccionarios
 * de tags.
 * @author Grupo Kaufmann - Heizenreder - Perales.
 */
public class DiccionarioDeTag {
    private NodoDiccionario raiz;
    private String archivoDiccionario;

    public DiccionarioDeTag(){
        raiz = new NodoDiccionario();
        archivoDiccionario = "doc/tags.txt";
    }

    public DiccionarioDeTag(String pathArchivo){
        raiz = new NodoDiccionario();
        archivoDiccionario = pathArchivo;
    }

    public void cargarDiccionario(){
        try {
            // Abro el archivo para lectura
            FileInputStream fd = new FileInputStream(archivoDiccionario);
            // Creo un buffered reader para leer
            BufferedReader bf = new BufferedReader(new InputStreamReader(fd));
            String lineaActual;
            while ((lineaActual = bf.readLine()) != null) {
                raiz.agregarPalabra(lineaActual);
            }
            // Cierro el archivo
            fd.close();
        }
        catch (FileNotFoundException e) {
            System.err.println("No pudo abrir el archivo: " + e.getMessage());
        }
        catch (IOException e) {
            System.err.println("No pudo leer línea: " + e.getMessage());
        }
        System.out.println("Diccionario cargado correctamente.");
    }

    public void guardarDiccionario(){
        System.out.println("Guardando diccionario...");
        Vector palabras = raiz.buscarCoincidencias(null);
        try {
            // Abro el archivo para escritura
            FileOutputStream fd = new FileOutputStream("temporal.txt");
            // Creo un buffered reader para leer
            for(int i=0;i<palabras.size();i++){
                // mira el quilombo que hay que hacer para escribir en
                // un archivo en Java. Fijate en Python:
                // palabras = ["hola", "chau", "todas las palabras que quieras"]
                // archivo = open("diccionario.txt", "w")
                // for palabra in palabras:
                //      archivo.write(palabra)
                // archivo.close()
                fd.write(((String)palabras.elementAt(i)).concat("\n").getBytes());
            }
            // Cierro el archivo
            fd.close();
        }
        catch (FileNotFoundException e) {
            System.err.println("No pudo abrir el archivo: " + e.getMessage());
        }
        catch (IOException e) {
            System.err.println("No pudo leer línea: " + e.getMessage());
        }
        System.out.println("Diccionario guardado correctamente.");
    }

    public NodoDiccionario getRaiz(){
        return raiz;
    }

    public Vector buscarCoincidencias(String cadena){
        return raiz.buscarCoincidencias(cadena);
    }
}